/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Encoder;

/**
 *
 * @author ian
 */
public class Hide {
    
    //下面這陣列為資料存進去的位置
    int[]datalocal ={15,22,23,29,30,31,35,36,37,38,39,42,43,44,45,46,47,49,50,51,52,53,54,
                    55,56,57,58,59,60,61,62,63};


    public void Writelength(int[]p,int lengh){  //這函式將計算音樂需要幾個blocks的大小寫進去
        int number = lengh;
        int bit = 1<<24; //total size will save in 20bit
        int k=0;
        /*for(int i=0;i<datalocal.length-12;i++){
            System.out.print(p[datalocal[i]]+" ");
        }*/
        //System.out.println(lengh+" : :"+(-1%2));
        ////////////////////////////////////////////////////////////////////////
        while( (bit >>= 1) > 0) {
            System.out.print(((number & bit) != 0 ? "1" : "0"));
            if((number & bit) != 0 ){ //存入資料為1時注意偶數
                if(p[datalocal[k]]%2==0 && p[datalocal[k]]>=0) //正偶數-1
                    p[datalocal[k]]+=3;
                else if(p[datalocal[k]]%2==0 && p[datalocal[k]]<0) //負偶數+1
                    p[datalocal[k]]-=3;
                //奇數不理
            }
            else{//存入資料為0時注意奇數
                if(Math.abs (p[datalocal[k]]%2)==1 && p[datalocal[k]]>=0) //正偶數-1
                    p[datalocal[k]]-=3;
                else if(Math.abs (p[datalocal[k]]%2)==1 && p[datalocal[k]]<0) //負偶數+1
                    p[datalocal[k]]+=3;
                //偶數不理
            }
            k++;
        }
        ////////////////////////////////////////////////////////////////////////
        System.out.println();
        for(int i=0;i<datalocal.length-12;i++){
            System.out.print(p[datalocal[i]]+" ");
        }
    }
    public int Readlength(int[]p){
        int size=0;
        for(int i=0;i<24;i++){
            if(p[datalocal[i]]%2!=0){
                //System.out.println("單");
                size=(size<<1) + 1;
            }
            else{
                //System.out.println("偶");
                size=(size<<1) + 0;
            }
        }
        //System.out.println("size="+size);
        return size;
    }
    public void WritelData(int []p,byte []data){ //p[64] data[4]
        int bit = 256;
        int k=0;
        for(int i=0;i<data.length;i++){
            bit = 256;
            while((bit >>= 1) > 0){
                //System.out.print(((data[i] & bit) != 0 ? "1" : "0"));
                if((data[i] & bit) != 0 ){ //存入資料為1時注意偶數
                    if(p[datalocal[k]]%2==0 && p[datalocal[k]]>=0) //正偶數-1
                        p[datalocal[k]]+=3;
                    else if(p[datalocal[k]]%2==0 && p[datalocal[k]]<0) //負偶數+1
                        p[datalocal[k]]-=3;
                    //奇數不理
                    else{
                        p[datalocal[k]]-=2;
                    }
                }
                else{//存入資料為0時注意奇數
                    if(Math.abs (p[datalocal[k]]%2)==1 && p[datalocal[k]]>=0) //正偶數-1
                        p[datalocal[k]]-=3;
                    else if(Math.abs (p[datalocal[k]]%2)==1 && p[datalocal[k]]<0) //負偶數+1
                        p[datalocal[k]]+=3;
                    //偶數不理
                    else{
                        p[datalocal[k]]-=2;
                    }
                }
                k++;
            }
        }
    }
    public void ReadData(int []p,byte []data){
        for(int i=0;i<data.length;i++){
            for(int z=0;z<8;z++){
                if(p[datalocal[i*8+z]]%2!=0){
                //System.out.println("單");
                    data[i]=(byte) ((data[i] << 1) + 1);
                }
                else{
                    //System.out.println("偶");
                    data[i]=(byte) ((data[i] << 1) + 0);
                }
            }
        }
    }

    public void print(int []p){
        System.out.println();
        for(int i=0;i<datalocal.length;i++){
            System.out.print(p[datalocal[i]]+" ");
        }
    }
}
